package org.project.single.service;

import com.github.pagehelper.Page;
import org.project.single.pojo.dto.dict.DictDataCacheDto;
import org.project.single.pojo.dto.dict.DictTypeCacheDto;
import org.project.single.pojo.po.SysDictData;
import org.project.single.pojo.po.SysDictType;
import org.project.single.pojo.ro.EnableRo;
import org.project.single.pojo.ro.dict.DictDataListRo;
import org.project.single.pojo.ro.dict.DictTypeListRo;
import org.project.single.pojo.vo.dict.*;

import java.util.Collection;
import java.util.List;

public interface SysDictService {
    /**
     * 后台字典列表
     */
    Page<DictTypeListVo> getDictTypeListBack(DictTypeListRo dictTypeListRo);

    /**
     * 获取字典详情
     * @param id
     * @return
     */
    DictTypeDetailVo getDictTypeDetail(String id);

    /**
     * 字典编辑
     * @param dictTypeEditVo
     */
    void editDictType(DictTypeEditVo dictTypeEditVo);

    /**
     * 字典删除
     * @param id
     */
    void deleteDictType(String id);

    /**
     * 类型启用
     * @param enableRo
     */
    void enableDictType(EnableRo enableRo);

    /**
     * 获取字典数据列表
     * @param dictDataListRo
     * @return
     */
    Page<DictDataListVo> getDictDataListBack(DictDataListRo dictDataListRo);

    /**
     * 获取字典类别数据
     * @param id
     * @return
     */
    DictDataDetailVo getDictDataDetail(String id);

    /**
     * 编辑字典数据
     * @param dictDataEditVo
     */
    void editDictData(DictDataEditVo dictDataEditVo);

    /**
     * 删除字典数据
     * @param id
     */
    void deleteDictData(String id);

    /**
     * 字典数据启用
     * @param enableRo
     */
    void enableDictData(EnableRo enableRo);

    /**
     * 根据code查询字典数据用于缓存
     * @param code
     * @return
     */
    List<SysDictData> findDictDataCacheDtoDbByCode(String code);

    /**
     * 根据code查询字典类型用于缓存
     * @param code
     * @return
     */
    SysDictType findDictTypeCacheDtoDbByCode(String code);




    /**
     * dictType数据缓存刷新
     * @param opt 1编辑   2删除
     * @param sysDictType
     */
    void updateDictTypeCache(Integer opt,String code,SysDictType sysDictType);

    /**
     * dictData数据缓存刷新
     * @param opt 1编辑   2删除
     * @param sysDictData
     */
    void updateDictDataCache(Integer opt,String code,SysDictData sysDictData);

    /**
     * dictData数据缓存全量刷新
     * @param code
     * @param dictDataList
     */
    void updateDictDataAllCache(String code, Collection<SysDictData> dictDataList);
}
